Cannot use object of type stdClass as array |
2009/03/16 ~ 阿亮 ~ |
最近用 php 的 array 處理下述的程式碼,
$author = 'Mary'; $test[$author] = array('message'=>'測試', 'time'=> 1237175074); $test2 = json_decode(json_encode($test)); print_r($test2[$author]);
一直得到下述的錯誤訊息
Cannot use object of type stdClass as array
這個程式碼,只要第三行加個 true,就可以了。
$author = 'Mary'; $test[$author] = array('message'=>'測試', 'time'=> 1237175074); $test2 = json_decode(json_encode($test), true); print_r($test2[$author]);
這個表示 decode 成 assoc array 而非預設的 stdClass,
所謂的 stdClass 就是一般「類別」,在 PHP 下也可以 encode 成 json code.
比如,原本的程式,若做 print_r($test2) 會得到下述的結
stdClass Object ( [Mary] => stdClass Object ( [message] => 測試 [time] => 1237175074 ) )
這表示一個類別而且包含數值的資料,相當於下面的資料結構。
Class Object { Class Mary ( message: 測試 time: 1237175074 ) }
弄成 stdClass 的方式,也不是不可以,若要取得 assoc 下的 $test2[‘Mary’],在類別只要
$test2->Mary
或
$test2->$author
即可,只是就不是很直覺是原來 $test2[‘Mary’] 的意思了。
好久沒玩 PHP 的類別,熊熊地給它忘記
這裡很容易被弄迷糊。